<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 静态成员 ： 包含 静态属性 和 静态方法
        // 静态成员 是属于类的  不属于 实例化对象的成员 。 使用是不需要实例化的。
        // 需要修饰符 static 修饰 

        // ES5

        // function Person(name){
        //     this.name = name;
        // }

        // Person.num = 10;  // 静态属性
        // Person.fn = function(){  // 静态方法
        //     console.log("fn")
        // }

        // // 调用 不需要实例化

        // console.log(Person.num);
        // Person.fn();


        // ES6  static 修饰静态成员

        // class Person{
        //     static num = 10;  // 静态属性
        //     constructor(name){
        //         this.name = name
        //     }
        //     static fn(){  // 静态方法
        //         console.log("fn");
        //     }
        // }

        // // 调用静态成员 ,不需要实例化；
        // console.log(Person.num);
        // Person.fn();


        // 静态成员

        // Object.assign
        // Object.freeze()
        // Object.seal
        // Object.entries
        // Object.keys
        // Object.values


        // 一、统计类的 实例化次数；
        // 1.设置全局变量 (变量污染) 2. 静态属性

        // let num = 0;
        // class Person{
        //     static num = 0;
        //     constructor(name){
        //         this.name = name;
        //         // this.num = 0;
        //         // num++;
        //         Person.num++;
        //     }
        // }

        // let zhangsan = new Person("zhangsan");
        // let lisi = new Person("lsii");
        // let wangwu = new Person("wangwu");
        // console.log(Person.num);
        // console.log(num);



        //二、单例模式 ： 保证一个类 始终只有一个实例。
        // 1.通过全局变量记录实例化的对象
        // let instance;  // 记录实例化的对象
        // class Person{
        //     constructor(name){
        //         this.name = name;
        //         if(instance){
        //             // 实例化过
        //             return instance;
        //         }else{
        //             // 没有实例化过 ，通过instance 保存实例化对象
        //             instance = this;
        //         }
        //     }
        // }

        // let  zhangsan = new Person("张三");
        // let lisi = new Person("李四");
        // console.log(zhangsan,lisi);

        // 2.静态成员实现单例模式

        // let instance;  // 记录实例化的对象
        class Person{
            static instance;
            constructor(name){
                this.name = name;
                if(Person.instance){
                    // 实例化过
                    return Person.instance;
                }else{
                    // 没有实例化过 ，通过instance 保存实例化对象
                    Person.instance = this;
                }
            }
        }

        let  zhangsan = new Person("张三");
        let lisi = new Person("李四");
        let wangwu = new Person("王五");
        console.log(zhangsan,lisi,wangwu);
        // console.log(zhangsan.__proto__);


        var arr = [1,2,3];
        console.log(arr);

    </script>
</body>
</html>